/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia;


import Clases.Factura;
import Clases.LineaServicioFactura;
import Clases.Servicio;
import java.sql.*;
import java.util.ArrayList;

/**
 * @author Jerónimo Trigueros Vera
 */
public class PersistenciaLineaFactura{

    public static int insertarLineaServicioFactura(LineaServicioFactura lsf, Factura f){
        

        String sql = "insert into lineaserviciofactura (codigofactura, nombreservicio, cantidad, precio, totallinea)"
                   + " values ('"+ f.getCodigo() +"', '"+ lsf.getServicio().getNombre()+"',"+ lsf.getCantidad() +","+ lsf.getPrecioUnidad()+","+ lsf.getTotalLinea() +");";

        // declaracion de variables para la conexion de la BD
        Connection con  = null;
        Statement st = null;
        int ret = 0;

        // CONEXION y ejecucion de la sentencia SQL
        try{
            con = Conexion.getConexion();
            st = con.createStatement();
            ret = st.executeUpdate(sql);
        }
        catch(Exception e){
            System.out.println("Error al insertar una nueva linea \n\n"+e.getMessage());
        }
        finally{
            Conexion.cerrarConexion(con);
        }
     return ret;
    }


    public static LineaServicioFactura obtenerLineaServicioFactura(String codFactura, String nombreServicio){

        String sql= "select * from lineaserviciofactura where codigofactura = '"+ codFactura +"' and nombreservicio= '"+ nombreServicio +"';";
        String sql2= "select * from servicio where nombre = '"+ nombreServicio +"';";

        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        ResultSet rs2 = null;

        // declaracion de variables para el objeto USUARIO
        LineaServicioFactura lsf = null;
        Servicio servicio = null;
        try{
            con = Conexion.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql2);
            if(rs.next())
            {              
                servicio=new Servicio(rs.getString("nombre"),rs.getString("descripcion"));
            }
            
            rs2 = st.executeQuery(sql);
            if(rs2.next())
            {
                lsf = new LineaServicioFactura(servicio,rs2.getFloat("cantidad"),rs2.getFloat("precio"));
            }

            rs2.close();
            rs.close();
            st.close();
            
            

        }
        catch(Exception e){
            System.out.println("Error al obtener la línea de la factura \n "+e.getMessage());
        }
        finally{
            Conexion.cerrarConexion(con);
        }
        return lsf;
    }



     public static int borrarLineaServicioFactura(String codFactura, String nombreServicio) throws SQLException{

        String sql = "delete from lineaserviciofactura where codigofactura = '"+codFactura+"' and nombreservicio = '"+nombreServicio+"'";
        
        Connection con  = null;
        Statement st = null;
        int ret = 0;
        try{
            con = Conexion.getConexion();
            st = con.createStatement();
            ret = st.executeUpdate(sql);
            st.close();
        }
        catch(Exception e){
            System.out.println("Error al borrar la linea de la factura"+e.getMessage());

        }
        finally{
            Conexion.cerrarConexion(con);
        }
        return ret;
    }



    public static ArrayList<LineaServicioFactura> obtenerLineas(String codFactura){

        // sentencia SQL
        String sql = "select * from lineaserviciofactura where codigofactura = '" + codFactura + "'";

        // declaracion de variables para el objeto usuario
        ArrayList<LineaServicioFactura> lista= new ArrayList();
        LineaServicioFactura lsf = new LineaServicioFactura();
        Servicio servicio = new Servicio();

        // declaracion de variables para la conexion de la BD
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        try{
            con = Conexion.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);

            while(rs.next()){
                servicio = PersistenciaServicio.obtenerServicio(rs.getString("nombreservicio"));
                lsf = obtenerLineaServicioFactura(codFactura, servicio.getNombre());
                lista.add(lsf);
            }
            
            rs.close();
            st.close();
        }
        catch(Exception e){
            System.out.println("Error al obtener las líneas de la factura \n "+e.getMessage());
        }
        return lista;
    }
    
    public static int modificarLinea(Factura factura, LineaServicioFactura linea)
    {
        Connection con = null;
        Statement st = null;         
        int ret = 0;



        try {
            con = Conexion.getConexion();
            st = con.createStatement();
            
        String sql = "update lineaserviciofactura set "
                + "codigofactura = '" + factura.getCodigo()+ "', "
                + "nombreservicio = '" + linea.getServicio().getNombre() + "', "
                + "cantidad =  " + linea.getCantidad() + ", "
                + "precio =  " + linea.getPrecioUnidad() + ", "
                + "totallinea = " + linea.getTotalLinea() + " "
                + "where codigofactura = '" + factura.getCodigo()+"' "
                + "and nombreservicio = '" + linea.getServicio().getNombre() + "'";

            
            ret = st.executeUpdate(sql);  
            st.close();
        } catch (Exception e) {
            System.out.println("Error al modificar la linea" + e.getMessage());
        } finally {
            Conexion.cerrarConexion(con);
        }
        
        return ret;            
    }

}